<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script src="data.js"></script>
<script>
	// Array原型上的新增方法
	// let arr = [1,2,3,4];
	// // console.log(arr.constructor === Array);
	// console.log(arr.__proto__ === Array.prototype);
	// console.log(Array.prototype.__proto__ === Object.prototype);
	// console.log(Object.prototype.__proto__);
	//
	// let arr = [1,2,3,4];
	// console.log(arr.copyWithin)
	
	{
		// 1- `copyWithin`：数组实例的`copyWithin()`方法，在当前数组内部，将指定位置的成员复制到其他位置（会覆盖原有成员）
		//  ，然后返回当前数组。也就是说，使用这个方法，会修改当前数组.
		// const arr = [1,2,3,4,5,6,7,8];
		// const arr2 = arr.copyWithin();// 相当于：const arr2 = arr;
		// console.log(arr2 === arr);
		
		// 接收三个参数：
		// 第一个参数是粘贴的位置
		// 第二个参数是复制的起始位置，默认值为0
		// 第三个参数是复制的结束位置-1，默认值为长度
		// console.log(arr.copyWithin(1));//复制的内容为：1,2,3,4,5,6,7,8  [1,1,2,3,4,5,6,7]
		// 粘贴的位置为下标1，复制的起始位置为2
		// console.log(arr.copyWithin(1,2));// 复制的内容为：3,4,5,6,7,8  [1,3,4,5,6,7,8,8]
		// console.log(arr.copyWithin(3,2));// 复制的内容为：3,4,5,6,7,8  [1,2,3,3,4,5,6,7]
		// console.log(arr.copyWithin(3,2,6));// 复制的内容为：3,4,5,6  [1,2,3,3,4,5,6,8];
		// console.log(arr.copyWithin(5,3,4));// 复制的内容为：4  [1,2,3,4,5,4,7,8];
		
		
		// console.log(arr.copyWithin(3,2,6));// 复制的内容：3,4,5,6 [1,2,3,3,4,5,6,8]
		// console.log(arr.copyWithin(5,3,4));// 复制的内容：3  [1,2,3,3,4,3,6,8]
	}
	{
		// fill：使用固定值填充数组
		// * `fill`方法用于空数组的初始化非常方便。数组中已有的元素，会被全部抹去。
		{
			// let arr = [1,2,3,4];
			// console.log(arr.fill(0));
			
			// 数组的长度为100，每个元素值为80
			// console.log(new Array(100).fill(80));
		}
		
		// * `fill`方法还可以接受第二个(默认0)和第三个参数（默认数组的长度），用于指定填充的起始位置和结束位置。
		// {
		// 	let arr = [1,2,3,4,5,6];
		// 	console.log(arr.fill("lala",1));// [1, 'lala', 'lala', 'lala', 'lala', 'lala']
		// 	console.log(arr.fill("lala",1,3));// [1,'lala','lala',4,5,6]
		// }
	}
	{
		// `entries()`，`keys()`和`values()`
		// `ES6` 提供三个新的方法——`entries()`，`keys()`和`values()`——用于遍历数组。
		// 它们都返回一个遍历器对象,可以用`for...of`循环进行遍历，
		// 唯一的区别是`keys()`是对键名的遍历、`values()`是对键值的遍历，`entries()`是对键值对的遍历。
		
		// keys()
		// let arr = [1,2,3,4,5];
		// for(let index of arr.keys()){
		// 	console.log(index,arr[index]);
		// }
		
		// values():可以省略values()
		// let arr = [1,2,3,4,5];
		// for(let v of arr.values()){
		// 	console.log(v);
		// }
		
		// entries()
		// let arr = [1,2,3,4,5];
		// for(let [a,b] of arr.entries()){
		// 	console.log(a,b);
		// }
	}
	{
		// find
		{
			// 会对数组进行查找。如果找到第一个满足条件的元素查找停止。并将该元素进行返回。
			// 如果没有找到满足条件的元素，返回undefined
			// let arr = [1, 2, 3, 4, 5];
			// const result = arr.find(function (item, index, arr2) {
			// 	console.log(item, index, arr2);
			// 	return item === 40;
			// });
			// console.log("result", result);
			
			
			// 1371010
			// const result = response.find(function(item){
			// 	return item.id === 1371010
			// });
			// console.log(result);
		}
		// findIndex
		{
			// findIndex与find的区别： findIndex返回的是第一个满足条件的元素所在的下标，如果没有找到满足条件的下标返回-1
			// let arr = [1,2,3,4,5,5,6,7,8];
			// let index = arr.findIndex(function(item,index,arr2){
			// 	return item === 5;
			// })
			// console.log(index);
		}
		// includes
		{
			// let arr = [1,2,3,4,5];
			// console.log(arr.includes(5));
			// console.log(arr.find(function(item){return item===5})!==undefined);
			// console.log(arr.findIndex(function(item){return item===5})!==-1);
		}
		// some:返回的是一个布尔值
		{
			// 1351563
			// const result = response.some(function(item){
			// 	return item.id === 1351563;
			// });
			// console.log(result);
		}
		{
			// // filter:将所有满足条件的元素进行提取。
			// let arr = [1,2,3,4,5,6,5];
			// // let arr2 = arr.filter(function(item,index,arr2){
			// // 	return item === 5;
			// // });
			// // console.log(arr2);// [5,5]
			//
			// let arr3 = arr.filter(function(item,index,arr2){
			// 	return item !== 5;//删除所有元素值为5的数据。
			// });
			// console.log(arr3);// [1,2,3,4,6];
			
		}
		{
			// let arr = [1,2,3,4,5];
			// arr.splice(1,1);
			// console.log(arr);// [1, 3, 4, 5]
		}
		{
			// flat
			// - 数组的成员有时还是数组，`Array.prototype.flat()`用于将嵌套的数组“拉平”，变成一维的数组。该方法返回一个新数组，对原数据没有影响。
			{
				// let arr = [1,2,3,[4,5,6],7,8];
				// console.log(arr.flat(),arr);// [1, 2, 3, 4, 5, 6, 7, 8] [1,2,3,[4,5,6],7,8]
				
				// let arr = [1,2,[3,[4,5],6],7,8];
				// console.log(arr.flat());// [1,2,3,[4,5],6,7,8]
				// console.log(arr.flat().flat());// [1,2,3,4,5,6,7,8]
				// console.log(arr.flat(1));// [1,2,3,[4,5],6,7,8]
				// console.log(arr.flat(2));// [1,2,3,4,5,6,7,8]
				// console.log(arr.flat(Infinity))// [1,2,3,4,5,6,7,8]
			}
			// - `flat()`默认只会“拉平”一层，如果想要“拉平”多层的嵌套数组，可以将`flat()`方法的参数写成一个整数，表示想要拉平的层数，默认为1
			// - 如果不管有多少层嵌套，都要转成一维数组，可以用`Infinity`关键字作为参数
		}
	}
</script>
</html>